/*
 * @Descripttion: unTitle
 * @Author: yizheng.yuan
 * @Date: 2021-11-16 10:56:43
 * @LastEditors: yizheng.yuan
 * @LastEditTime: 2021-11-16 16:26:02
 */
const express = require('express')

// 要安装这个插件 body-parser 来接收参数 npm i body-parser
const bodyParser=require('body-parser')
const app=express()
//拦截所有的请求，对post请求做出处理，把参数存在req.body中
//extended:false 方法内部使用querysyring模块处理请求参数的格式
app.use(bodyParser.json());//返回一个只解析json的中间件，最后保存的数据都放在req.body对象上
app.use(bodyParser.urlencoded({ extended: true }));//返回的对象为任意类型
const port = 3000;

var gRel = {
  error: 0,
  msg: 'success',
  data: ''
}
var ngRel = {
  error: 1,
  msg: 'error',
  data: ''
}

// 引入数据库
require('./db/index');
var User = require('./db/user')

// 插入一条管理员数据, 密码可以用md5加密
async function addAdmin(){
  // 查询是否有admin用户
  let user = await User.find({username: 'admin'})
  if(user && user.length>0){
    return
  }

  // 如果没有，再新增
  var u = new User({
    username: 'admin',
    password: '123456'
  })
  let rel = await u.save()
  console.log('插入1一条管理员-成功',rel);
}
addAdmin()

// 新增一条数据
app.post('/add', async (req, res) => {
  console.log('add-req',req.body)
  let {username, password} = req.body
  var u = new User({
    username,
    password
  })
  // 执行增加操作
  try {
    // 保存数据库
    let rel = await u.save()
    console.log('保存成功',rel)
    gRel.data = rel
    res.send(gRel)
  } catch (error) {
    console.log('保存失败',error)
    ngRel.data = error
    res.send(ngRel)
  }
})

// 参考网址：https://blog.csdn.net/weixin_44376122/article/details/109772367?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.no_search_link

// 删除一条数据
app.post('/userRemove', async (req, res) => {
  console.log('add-req',req.body)
  let {_id} = req.body
  // 执行增加操作
  try {
    // 保存数据库
    let rel = await User.deleteOne({_id})
    console.log('删除成功',rel)
    gRel.data = rel
    res.send(gRel)
  } catch (error) {
    console.log('删除失败',error)
    ngRel.data = error
    res.send(ngRel)
  }
})

// 更新用户
app.post('/updateUser', async (req, res) => {
  console.log('update-req',req.body)
  let {username, password, _id} = req.body
  // 执行增加操作
  try {
    // 保存数据库
    let rel = await User.updateOne({_id}, {$set:{username, password}})
    console.log('保存成功',rel)
    gRel.data = rel
    res.send(gRel)
  } catch (error) {
    console.log('保存失败',error)
    ngRel.data = error
    res.send(ngRel)
  }
})

// 获取所有用户
app.get('/userList', async (req, res) => {
  try {
    // 查询数据库
    let rel = await User.find()
    gRel.data = rel
    res.send(gRel)
  } catch (error) {
    ngRel.data = error
    res.send(ngRel)
  }
})


app.get('/', (req, res) => {
  res.send('Hello World!')
})


// 登录处理
app.post('/login', async (req, res) => {
  console.log('login-req',req.body)
  let {username, password} = req.body
  // if(username === 'admin' &&  password =='123456'){
  //   res.send(gRel)
  // }
  let rel = await User.find(req.body)
  console.log('查询用户3', rel);
  if(rel && rel.length>0){
    res.send(gRel)
  }
  else{
    ngRel.msg = '用户名或密码错误！'
    res.send(ngRel)
  }
})

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})